package cn.yanxiaohui.service.web.pattern.template;

import cn.yanxiaohui.common.vo.ActionResult;

import java.util.Map;



/**
 * @Description 模版模式实现聚合支付平台
 * @Author： yanxh<br>
 * @Date 2019/12/9 13:05<br>
 * @Version 1.0<br>
 */
public abstract class PayTemplate {

    public Object pay(Map<String, Object> params){
        try {
            // 1.校验参数
            checkParams(params);
            // 2.日志收集
            saveLog(params);
            // 3.响应支付接口
            Object result = responseAPI(params);

            // 4.返回成功信息
            return success(result);
        } catch (Exception e){
            e.printStackTrace();
            // 5.返回错误信息
            return error(e.getMessage());
        }
    }

    /**
     * @Description 返回错误信息
     * @Author： yanxh<br>
     * @Date 2019/12/9 13:16<br>
     * @Version 1.0<br>
     */
    protected Object error(Object message){
        System.out.println("父类的失败");
        return ActionResult.error(message);
    };


    /**
     * @Description 返回成功信息
     * @Author： yanxh<br>
     * @Date 2019/12/9 13:16<br>
     * @Version 1.0<br>
     */
    protected Object success(Object result){
        System.out.println("父类的成功");
        return ActionResult.success(result);
    }


    /**
     * @Description 响应支付接口
     * @Author： yanxh<br>
     * @Date 2019/12/9 13:09<br>
     * @Version 1.0<br>
     */
    protected abstract Object responseAPI(Map<String, Object> params) throws Exception;

    /**
     * @Description 日志收集
     * @Author： yanxh<br>
     * @Date 2019/12/9 13:09<br>
     * @Version 1.0<br>
     */
    private void saveLog(Map<String, Object> params) {
        System.out.println("开始进行支付接口的日志收集...");
    }

    /**
     * @Description 校验参数
     * @Author： yanxh<br>
     * @Date 2019/12/9 13:08<br>
     * @Version 1.0<br>
     */
    protected abstract void checkParams(Map<String, Object> params)  throws Exception;


}
